ﭼﮕﻮﻧﻪ از ﻳﻚ ﺗﺎﺑﻊ ﺑﯿﺶ از ﻳﻚ ﺧﺮوﺟﻲ درﻳﺎﻓﺖ ﻛﻨﯿﻢ ؟
ﻇﺎھﺮا ﺑﻪ ﻧﻈﺮ ﻣﻲ رﺳﺪ ﻛﻪ ﺗﻮاﺑﻊ ﻓﻘﻂ ﻣﻲ ﺗﻮاﻧﻨﺪ ﻳﻚ return داﺷﺘﻪ ﺑﺎﺷﻨﺪ و ﺑﻼﻓﺎﺻﻠﻪ ﭘـﺲ از ﻓﺮاﺧـﻮاﻧﻲ return ﻛـﺎر ﺗﺎﺑﻊ ﭘﺎﻳﺎن ﻳﺎﻓﺘﻪ اﺳﺖ. در ﺳﻲ ﺷﺎرپ دو ﻛﻠﻤﻪ ی ﻛﻠﯿﺪی ﺑﻪ ﻧﺎم ھﺎی ref و out اﺿﺎﻓﻪ ﺷﺪه اﻧﺪ ﻛﻪ اﻳﻦ اﻣﺮ را ﺳﺎده ﺗﺮ ﻣﻲ ﻛﻨﻨﺪ.
اﺳﺘﻔﺎده از ﻛﻠﻤﻪ ی ﻛﻠﯿﺪی : out
از out در ﺗﻌﺮﻳﻒ ﺗﺎﺑﻊ ﻗﺒﻞ از ﻣﻌﺮﻓﻲ ﻧـﻮع آرﮔﻮﻣـﺎن ورودی اﺳـﺘﻔﺎده ﻣـﻲ ﻛﻨـﯿﻢ . در اﻳـﻦ ﺣﺎﻟـﺖ ﺑﺠـﺎی اﻳﻨﻜـﻪ ﺑـﻪ اﻳـﻦ آرﮔﻮﻣﺎن ، آرﮔﻮﻣﺎن ورودی ﺑﮕﻮﻳﯿﻢ ، ﻣﻲ ﺗﻮان آﻧﺮا آرﮔﻮﻣﺎن ﺧﺮوﺟﻲ ﻧﺎﻣﯿـﺪ. ﺗـﺎ ﻳـﻚ ﻣﺜـﺎل را در اﻳـﻦ زﻣﯿﻨـﻪ ﺑـﺎ ھـﻢ ﻣـﺮور ﻧﻜﻨﯿﻢ اﻳﻦ ﻣﻮرد ﻣﻔﮫﻮم ﻧﺨﻮاھﺪ ﺑﻮد :
ﻣﺜﺎل : ﻳﻚ ﺑﺮﻧﺎﻣـﻪ ی ﺳـﻲ ﺷـﺎرپ ﺟﺪﻳـﺪ consoleرا در VS.NETﺑـﺎز ﻛﻨﯿـﺪ و ﻧـﺎم آﻧـﺮا دراﺑﺘـﺪا ex۱۵ اﻧﺘﺨـﺎب ﻧﻤﺎﻳﯿـﺪ.
ﺳﭙﺲ ﻛﺪ زﻳﺮ را درون آن ﺑﻨﻮﻳﺴﯿﺪ :
;using System
namespace ex۱۵
}
class Class۱
}
( public static int TestOut( out char i
}
;'i = 'b
;۱- return
{
[[STAThread
(static void Main(string[] args
}
;char i // variable need not be initialized
;((Console.WriteLine(TestOut(out i
;(Console.WriteLine(i
;()Console.ReadLine
{
{
{
ﺗﻮﺿﯿﺤﺎﺗﻲ در ﻣﻮرد ﻛﺪ ﻓﻮق :
١- در ﺗﺎﺑﻊ TestOutآرﮔﻮﻣﺎن iاز ﺑﺎ ﻛﻠﻤﻪ ی ﻛﻠﯿﺪی out ﻣﺸﺨﺺ ﺷﺪه اﺳﺖ. ﻳﻌﻨﻲ اﻳﻨﻜﻪ درون ﺗﺎﺑﻊ ھـﺮ ﮔﻮﻧـﻪ ﺗﻐﯿﯿﺮی روی i اﻧﺠﺎم ﺷﻮد ، ﺧﺎرج از ﺗﺎﺑﻊ ﻗﺎﺑﻞ دﺳﺘﺮﺳﻲ اﺳﺖ.
٢- ﺗﻮاﺑﻌﻲ ﻛﻪ دارای آرﮔﻮﻣﺎﻧﮫﺎﻳﻲ ﺗﻌﺮﻳﻒ ﺷﺪه ﺑﺎ ﻛﻠﻤﻪ ی ﻛﻠﯿـﺪی outھـﺴﺘﻨﺪ ﻧﯿـﺰ ﻣـﻲ ﺗﻮاﻧﻨـﺪ از return ھـﻢ اﺳﺘﻔﺎده ﻛﻨﻨﺪ. ھﻤﺎﻧﻨﺪ ﻣﺜﺎل ﻓﻮق.
اﺳﺘﻔﺎده از ﻛﻠﻤﻪ ی ﻛﻠﯿﺪی : ref
اﻳﻦ ﻛﻠﻤﻪ ی ﻛﻠﯿﺪی ﻧﯿﺰ دﻗﯿﻘﺎ ھﻤﺎﻧﻨﺪ out ﻋﻤﻞ ﻣﻲ ﻛﻨﺪ و ﻧﺤﻮه ی ﺗﻌﺮﻳﻒ و اﺳﺘﻔﺎده از آن ﻧﯿﺰ ﻣﺸﺎﺑﻪ اﺳـﺖ ﺑـﺎ اﻳـﻦ ﺗﻔﺎوت ﻛﻪ آرﮔﻮﻣﺎﻧﻲ ﻛﻪ ﺑﻪ اﻳﻦ ﻧﻮع ﺗﻮاﺑﻊ ﻓﺮﺳﺘﺎده ﻣﻲ ﺷﻮد ﺑﺎﻳﺪ ﻣﻘﺪار دھﻲ اوﻟﯿﻪ ﺷﺪه ﺑﺎﺷﺪ.
ﻣﺜﺎل : ﻳﻚ ﺑﺮﻧﺎﻣـﻪ ی ﺳـﻲ ﺷـﺎرپ ﺟﺪﻳـﺪ consoleرا در VS.NETﺑـﺎز ﻛﻨﯿـﺪ و ﻧـﺎم آﻧـﺮا دراﺑﺘـﺪا ex۱۶ اﻧﺘﺨـﺎب ﻧﻤﺎﻳﯿـﺪ.
ﺳﭙﺲ ﻛﺪ زﻳﺮ را درون آن ﺑﻨﻮﻳﺴﯿﺪ :
;using System
namespace ex۱۶
}
class Class۱
}
(public static void FillArray(ref int[] arr
}
:// Create the array on demand
(if (arr == null
;[۰۱]arr = new int
:// Otherwise fill the array
;۳۲۱ = [۰]arr
;۴۲۰۱ = [۴]arr
{
[[STAThread
(static void Main(string[] args
}
:// Initialize the array
;{۵,۴,۳,۲,۱} = int[] myArray
:// Pass the array using ref
;(FillArray(ref myArray
:// Display the updated array
;(":Console.WriteLine("Array elements are
(++for (int i = ۰; i < myArray.Length; i
;([Console.WriteLine(myArray[i
;()Console.ReadLine
{
{
{
ﺗﻮﺿﯿﺤﺎﺗﻲ در ﻣﻮرد ﻛﺪ ﻓﻮق :
١- ھﻤﺎﻧﻄﻮر ﻛﻪ ﻣﻼﺣﻈﻪ ﻣﻲ ﻛﻨﯿﺪ در اﻳﻨﺠﺎ ھﻨﮕﺎم اﺳﺘﻔﺎده از ﺗﺎﺑﻊ FillArrayﺑﺎﻳﺪ آرﮔﻮﻣﺎﻧﻲ را ﻛﻪ ﻣﻲ ﺧـﻮاھﯿﻢ ﺑﻪ آن ﭘﺎس ﻛﻨﯿﻢ ﻣﻘﺪار دھﻲ اوﻟﯿﻪ ﻛﻨﯿﻢ.
٢- ﭘﺲ ﻣﻲ ﺗﻮان ﻧﺘﯿﺠﻪ ﮔﺮﻓﺖ آرﮔﻮﻣﺎﻧﮫﺎﻳﻲ ﻛﻪ ﺑﺎ outﺗﻌﺮﻳﻒ ﻣﻲ ﺷﻮﻧﺪ ﺑـﻪ ﺻـﻮرت ﺧـﺎﻟﺺ ﺧﺮوﺟـﻲ ھـﺴﺘﻨﺪ و ﻧﯿﺎزی ﺑﻪ ﻣﻘﺪار دھﻲ اوﻟﯿﻪ ھﻨﮕـﺎم اﺳـﺘﻔﺎده از آﻧﮫـﺎ وﺟـﻮد ﻧـﺪارد. از ref ھﻨﮕـﺎﻣﻲ اﺳـﺘﻔﺎده ﻣـﻲ ﻛﻨـﯿﻢ ﻛـﻪ ﺑﺨﻮاھﯿﻢ روی ﻣﺘﻐﯿﺮ ﻣﻮﺟﻮد و ﻣﻘﺪار دھﻲ ﺷﺪه ی ﺧﺎرج از ﺗﺎﺑﻊ ، درون ﺗﺎﺑﻊ ﻋﻤﻠﯿﺎﺗﻲ ﺻﻮرت ﮔﯿﺮد و ﺳـﭙﺲ ھﻤﺎن ﻣﺘﻐﯿﺮ دﺳﺘﻜﺎری ﺷﺪه ، ﻋﻮدت داده ﺷﻮد.
ﺗﻌﺮﻳﻒ ﺗﺎﺑﻌﻲ ﺑﺎ ﺗﻌﺪاد آرﮔﻮﻣﺎﻧﮫﺎی ﻧﺎﻣﻌﻠﻮم :
ﮔﺎھﻲ از اوﻗﺎت ﻧﯿﺎز اﺳﺖ ﺗﺎ ﺗﺎﺑﻌﻲ ﺗﻌﺮﻳﻒ ﻛﻨﯿﻢ ﻛﻪ ﺗﻌﺪاد آرﮔﻮﻣﺎﻧﮫﺎی آن ﻣﺘﻐﯿﺮ ﺑﺎﺷـﻨﺪ .ﺑـﺮای اﻳـﻦ ﻣﻨﻈـﻮر از ﻛﻠﻤـﻪ ی ﻛﻠﯿﺪی params اﺳﺘﻔﺎده ﻣﻲ ﺷﻮد.
دوﻧﻜﺘﻪ در اﻳﻨﺠﺎ ﺣﺎﺋﺰ اھﻤﯿﺖ اﺳﺖ:
١- در ھﺮ ﺗﺎﺑﻌﻲ ﺗﻨﮫﺎ ﻣﻲ ﺗﻮان ﻳﻜﺒﺎر از paramsاﺳﺘﻔﺎده ﻛﺮد.
٢- ﭘﺲ از ﺑﻜﺎر ﺑﺮدن params دﻳﮕﺮ ﻧﻤﻲ ﺗﻮان ھﯿﭻ آرﮔﻮﻣﺎﻧﻲ را ﺗﻌﺮﻳﻒ ﻛﺮد.
ﻳﻜﻲ از ﻣﺜﺎﻟﮫﺎﻳﻲ ﻛﻪ در اﻳﻦ زﻣﯿﻨﻪ ﻣﻲ ﺗﻮان اراﺋﻪ داد اﺳﺘﻔﺎده از آراﻳـﻪ ھـﺎ ﺑـﻪ ﻋﻨـﻮان آرﮔﻮﻣـﺎن ورودی اﺳـﺖ. در اﻳـﻦ ﺣﺎﻟﺖ ﻳﺎ ﻣﻲ ﺗﻮان ﻳﻚ آراﻳﻪ را ﺑﻪ ﺻﻮرت ﻛﺎﻣﻞ ﺑﻪ ﺗﺎﺑﻊ ﻣﻌﺮﻓﻲ ﻛﺮد و ﻳـﺎ ﺗﻨﮫـﺎ ﻧـﺎم آﻧـﺮا ﺑـﻪ ﺗـﺎﺑﻊ ﭘـﺎس ﻛـﺮد. ﻣﺜـﺎل زﻳـﺮ را ﻣﻼﺣﻈﻪ ﻛﻨﯿﺪ :
ﻣﺜﺎل : ﻳﻚ ﺑﺮﻧﺎﻣـﻪ ی ﺳـﻲ ﺷـﺎرپ ﺟﺪﻳـﺪ consoleرا در VS.NETﺑـﺎز ﻛﻨﯿـﺪ و ﻧـﺎم آﻧـﺮا دراﺑﺘـﺪا ex۱۷اﻧﺘﺨـﺎب ﻧﻤﺎﻳﯿـﺪ.
ﺳﭙﺲ ﻛﺪ زﻳﺮ را درون آن ﺑﻨﻮﻳﺴﯿﺪ :
;using System
namespace ex۱۷
}
class Class۱
}
(public static void UseParams(params int[] list
}
( ++for ( int i = ۰ ; i < list.Length ; i
;([Console.WriteLine(list[i
;()Console.WriteLine
{
[[STAThread
(static void Main(string[] args
}
;(۳ ,۲ ,۱)UseParams
;{۲۱,۱۱,۰۱} [۳]int[] myarray = new int
;(UseParams(myarray
;()Console.ReadLine
{
{
{
ﺗﻮﺿﯿﺤﺎﺗﻲ در ﻣﻮرد ﻛﺪ ﻓﻮق :
١- در ﺗﺎﺑﻊ main ﺑﻪ دو ﺻﻮرت از ﺗﺎﺑﻊ UseParams اﺳﺘﻔﺎده ﺷﺪه اﺳـﺖ. ﻳـﺎ اﻳﻨﻜـﻪ ﺧﯿﻠـﻲ ﺳـﺎده ھـﺮ ﺗﻌـﺪاد آرﮔﻮﻣﺎن را ﻣﻲ ﺗﻮان ﺑﻪ ﺗﺎﺑﻊ ﻓﺮﺳﺘﺎد و ﻳﺎ اﻳﻨﻜﻪ در اداﻣﻪ آراﻳﻪ اﻳﻲ رﺳﻤﺎ ﺗﻌﺮﻳـﻒ و ﺳـﭙﺲ ﺑـﻪ ﺗـﺎﺑﻊ ﻓﺮﺳـﺘﺎده ﺷﻮد.
٢- ﻧﺤﻮه ی ﺗﻌﺮﻳﻒ و اﺳﺘﻔﺎده از آراﻳﻪ ھﺎ ﺑﻪ ﺻﻮرت آرﮔﻮﻣﺎن ورودی را ﻧﯿﺰ ﻣﻲ ﺗﻮان در ﻣﺜﺎل ﻓﻮق آﻣﻮﺧﺖ.
منبع : برگرفته از سایت Vcsharp.ir
نظرات شما عزیزان: